// File:       hmap.c++
// Version:    1.01
// Author:     (c) Alexander Thoukydides, 1998
// Purpose:    Instantiate templates for the map class.
//             After including this file use
//
//               INSTANTIATE_MAP(T0,T1,T2)
//
//             to instantiate the templates for the specified
//             parameterisation or
//
//               INSTANTIATE_DESTROY_MAP(T0,T1,T2)
//
//             to also define destroy() functions.

// Change log:
//  12/1/00    Added multimap instantiation macros

// Include CathLibCPP header files
#include "tpltutil.h"

// Include CathLibCPP source code files
#ifndef cathlibcpp_hoistbp_CPP
#define cathlibcpp_hoistbp_CPP
#include "hoistbp.c++"
#endif
#ifndef cathlibcpp_hoistctdt_CPP
#define cathlibcpp_hoistctdt_CPP
#include "hoistctdt.c++"
#endif
#ifndef cathlibcpp_map_CPP
#define cathlibcpp_map_CPP
#include "map.c++"
#endif

// Define macros to instantiate the templates
#define INSTANTIATE_MAP(T0,T1,T2) \
    INSTANTIATE_CLASS_3(map, T0, T1, T2)
#define INSTANTIATE_DESTROY_MAP(T0,T1,T2) \
    inline void destroy( T0 *p) \
    { p->~T0(); } \
    inline void destroy( T1 *p) \
    { p->~T1(); } \
    inline void destroy( T2 *p) \
    { p->~T2(); } \
    INSTANTIATE_CLASS_3(map, T0, T1, T2)
#define INSTANTIATE_MULTIMAP(T0,T1,T2) \
    INSTANTIATE_CLASS_3(multimap, T0, T1, T2)
#define INSTANTIATE_DESTROY_MULTIMAP(T0,T1,T2) \
    inline void destroy( T0 *p) \
    { p->~T0(); } \
    inline void destroy( T1 *p) \
    { p->~T1(); } \
    inline void destroy( T2 *p) \
    { p->~T2(); } \
    INSTANTIATE_CLASS_3(multimap, T0, T1, T2)
